// #include <iostream>
// using namespace std;

// void test_func() {
//     cout << "this is test_func()" << endl;
// }

// void test_func(int) {
//     cout << "this is test_func(int)" << endl;
// }

// void test() {
//     cout << "this is test()" << endl;
// }

// int main() {
//     return 0;
// }

// #include <iostream>
// #include <thread>
// #include <mutex>
// using namespace std;

// mutex mt;

// void handler() {
//     mt.lock();
//     mt.lock(); // 重复获取锁会导致死锁
// }

// int main() {
//     return 0;
// }

// class Base {
// public:
//     Base() = default;
//     virtual ~Base() = default;
// };

// class Derive : public Base {
// public:
//     Derive() = default;
//     virtual ~Derive() = default;

// public:
//     using ULL = unsigned long long;
//     typedef char* char_ptr;

// private:
//     int i;
//     double d;
//     ULL ull;
// };

// int main() {
//     Base b;
//     Base* ptr = new Derive();
//     Derive d;
//     delete ptr;
//     return 0;
// }

#include <chrono>
#include <functional>
#include <iostream>
#include <thread>
#include <vector>
using namespace std;

int main() {
    function<void(void)> handler = []() {
        int i = 0;
        while (i++ < 100) {
            this_thread::sleep_for(chrono::milliseconds(500));
        }
    };

    vector<thread> threads(5);
    for (auto& t : threads) {
        t = thread(handler);
    }

    for (auto& t : threads) {
        t.join();
    }

    return 0;
}